package fr.bugtracker.bean.administration.utilisateur;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import fr.bugtracker.bean.AbstractBean;
import fr.bugtracker.commun.outils.UtilsJsf;
import fr.bugtracker.entity.technique.Utilisateur;
import fr.bugtracker.service.administration.utilisateur.SrvValiderCompteEnAttente;

/**
 * Bean pour la validation des comptes en attente de validation
 * @author Laurent
 * @version 0.1
 */
@ManagedBean
@ViewScoped
public class BeanValiderCompteEnAttente extends AbstractBean {

	/**
	 * fr.bugtracker.service pour la validation des comptes en attente de validation
	 */
	@EJB
	private SrvValiderCompteEnAttente srvValiderCompteEnAttente;
	/**
	 * liste des listeUtilisateur dont le compte est en attente de validation
	 */
	private List<Utilisateur> listeUtilisateur = new ArrayList<Utilisateur>();
	/**
	 * liste des listeUtilisateur sélectionnés
	 */
	private Utilisateur[] listeSelectedUtilisateur;

	/**
	 * Constructeur de la classe <code>BeanValiderCompteEnAttente</code>.
	 */
	public BeanValiderCompteEnAttente() {
	}

	/**
	 * Méthode d'initialisation du fr.bugtracker.bean
	 */
	@Override
	public void initialisation() {
		listeUtilisateur = srvValiderCompteEnAttente.getAllUtilisateurValidationCompteEnAttente();
	}

	/**
	 * Valide les comptes des utilisateurs sélectionnés
	 */
	public void validerComptes() {
		srvValiderCompteEnAttente.validerComptes(Arrays.asList(listeSelectedUtilisateur));
		UtilsJsf.addMessage(FacesMessage.SEVERITY_INFO, "fonctionnel.utilisateur.info.validation");
		initialisation();
		UtilsJsf.executeUpdate("id-frm-en-attente:tableau-utilisateur");
	}

	/**
	 * Annule les comptes des utilisateurs sélectionnés
	 */
	public void annulerComptes() {
		srvValiderCompteEnAttente.annulerComptes(Arrays.asList(listeSelectedUtilisateur));
		UtilsJsf.addMessage(FacesMessage.SEVERITY_INFO, "fonctionnel.utilisateur.info.validation");
		initialisation();
		UtilsJsf.executeUpdate("id-frm-en-attente:tableau-utilisateur");
	}

	/**
	 * <p><b>Accès en lecture à l'attribut listeUtilisateur.</b></p>
	 * @return Retourne l'attribut listeUtilisateur sous forme de <code>List<Utilisateur></code>.
	 */
	public List<Utilisateur> getListeUtilisateur() {
		return this.listeUtilisateur;
	}

	/**
	 * <p><b>Accès en écriture à l'attribut listeUtilisateur.</b></p>
	 * @param listeUtilisateur L'attribut listeUtilisateur à modifier.
	 */
	public void setListeUtilisateur(List<Utilisateur> listeUtilisateur) {
		this.listeUtilisateur = listeUtilisateur;
	}

	/**
	 * <p><b>Accès en lecture à l'attribut listeSelectedUtilisateur.</b></p>
	 * @return Retourne l'attribut listeSelectedUtilisateur sous forme de <code>Utilisateur[]</code>.
	 */
	public Utilisateur[] getListeSelectedUtilisateur() {
		return this.listeSelectedUtilisateur;
	}

	/**
	 * <p><b>Accès en écriture à l'attribut listeSelectedUtilisateur.</b></p>
	 * @param listeSelectedUtilisateur L'attribut listeSelectedUtilisateur à modifier.
	 */
	public void setListeSelectedUtilisateur(Utilisateur[] listeSelectedUtilisateur) {
		this.listeSelectedUtilisateur = listeSelectedUtilisateur;
	}

}
